package cn.jingyuan.swan.cloud.mapping;

import org.springframework.web.method.HandlerMethod;


/**
 * 匹配 api 资源是否被忽略
 */
public class MatchIgnoreApiUtils {

    /*
        忽略规则
            异常：Controller 类上同时存在 IgnoreApi 和 NotIgnoreApi 抛异常

            1、Controller 类上有 IgnoreApi
                a）默认情况下所有方法按忽略处理
                b）如果方法中明确包含 NotIgnoreApi，则按照不忽略处理
                c）如果方法中明确包含 IgnoreApi，则按照忽略处理

            2、Controller 类上无 NotIgnoreApi
                a）默认情况下所有方法按不忽略处理
                b）如果方法中明确包含 IgnoreApi，则按照忽略处理
                b）如果方法中明确包含 NotIgnoreApi，则按照不忽略处理
     */

    // FIXME 按上述规则处理
    public static boolean isIgnore(HandlerMethod handlerMethod) {
        // 忽略 Request Mapping
        if (null != handlerMethod.getMethod().getAnnotation(IgnoreApi.class)) {
            return true;
        }

        if (null != handlerMethod.getMethod().getDeclaringClass().getAnnotation(IgnoreApi.class)) {
            return true;
        }

        return false;
    }

}
